import theAxios from 'axios'
import router from '@/router/index.js';
import { Notify } from 'vant';
import {shuaxintoken} from './index.js'
import {getToken,removeToken,setToken} from '@/utils/token.js'
const axioss=theAxios.create({
    baseURL:'http://toutiao.itheima.net',  //设置基础路径
    timeout:10000,   //设置超时时间
})
// 添加请求拦截器  // 在发送请求之前做一些事情return config;   }, function ( error ) { // 做一些请求错误的事情return Promise .reject(error );   });
axioss.interceptors.request.use((config)=>{
  //判断本地有没有token,看看是否需要加
  //?.表示可选链,如果前面对象里面没有length,则会返回undefined,
  //如果getToken有值,那才能调取length获取长度
  if(getToken()?.length>0 && config.headers.Authorization === undefined){
      config.headers.Authorization=`Bearer ${getToken()}`
  }
     return config
},(error)=>{
    return Promise.reject(error)
})
    
  // 添加响应拦截器  // 对响应数据执行操作return response;   }, function ( error ) { // 对响应错误执行操作return Promise .reject(error) ;   });
axioss.interceptors.response.use((config)=>{
   return config
},async (error)=>{//如果响应拦截器失败 代表响应数据失败 就要进行判断
  if(error.response.status==401){ //只有401代表身份过期,要跳转登录页
    Notify({type:'warning', message:'身份已经过期'})
    //方式1:如果token过期,清除token,跳回登录页,让用户自己去登录
    //router.currentRoute相当于this.$route就是路由信息对象
    removeToken()
    router.replace(`/login?path=${router.currentRoute.fullPath}`)
    //方式2:利用refresh_token进行无感知的刷新获取新的token
  //   const req=await shuaxintoken()  //获取新的token
  //   setToken(req.data.data.token)  //将新的token进行替换
  //   error.config.headers.Authorization=`Bearer ${req.data.data.token}`  //将新的token从刚才失败的请求头里面替换
  //  return axioss(error.config)   //重新发起刚才失败的请求并且将新返回的promise对象返回出去
  }
  // else if(error.response.status==500 && error.config.url=='/v1_0/authorizations' && error.config.method=='put')
  // {//证明刷新的refresh_token也过期了,就重新登录 清除token和refresh_token
  //    localStorage.removeItem('geek-itheima')
  //    localStorage.removeItem('refresh_token')
  //    Notify({type: 'warning', message:'身份已经过期'})
  //     router.replace('/login')
  // }
 return Promise.reject(error)
})
      

export default ({url,method="get",params={},data={},headers={}})=>{
 return axioss({
          url,
          method,
          params,
          data,
          headers,
        })
}